<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>灵活的控制对象的属性特征</title>
</head>
<body>
    <script>
        // 'use strict'

        let hd = {name:"后盾人",age:18};
        // 获得对象的属性特征
        console.log(JSON.stringify(Object.getOwnPropertyDescriptors(hd),null,2));
        
        // 配置对象的属性特征
        // Object.defineProperty(hd,'name',{
        //     // 配置属性值是否可以修改
        //     writable:false,
        //     enumerable:true,
        //     configurable:true
        // });
        // console.log(hd);
        // hd.name = "xiasnn";
        // console.log(hd.name);


        // Object.defineProperty(hd,'name',{
        //     writable:false,
        //     // 配置属性值是否可以查看
        //     enumerable:false,
        //     configurable:true
        // });
        // console.log(Object.keys(hd));
        // for (const key in hd) {
        //     console.log(key,hd[key]);
        // }


        Object.defineProperty(hd,'name',{
            writable:false,
            enumerable:true,
            // 配置属性值是否可以操作(增删)
            configurable:false
        });
        // 在严格模式下会报错提示
        delete hd.name;
        console.log(hd);



        // 一旦将某个属性的方法配置为false后，就不能将它再配置为true了，直接报错
        // Object.defineProperty(hd,'name',{
        //     writable:false,
        //     enumerable:true,
        //     configurable:true
        // });
    </script>
</body>
</html>